_d_e_c_o_d_e_r DDDDMMMMMMMMPPPPEEEEGGGG1111aaaauuuuddddiiiiooooddddeeeeccccooooddddeeeerrrr structure, created by
ddddmmmmMMMMPPPPEEEEGGGG1111AAAAuuuuddddiiiiooooDDDDeeeeccccooooddddeeeerrrrCCCCrrrreeeeaaaatttteeee((((3333ddddmmmm)))), specifies and stores the signal
processing parameters. It describes the kind of decompression
to perform, and holds the between-block state of the
decompressor. It is initially generated and processed by calls
to ddddmmmmMMMMPPPPEEEEGGGG1111AAAAuuuuddddiiiiooooDDDDeeeeccccooooddddeeeerrrrCCCCrrrreeeeaaaatttteeee((((3333ddddmmmm)))) and
ddddmmmmMMMMPPPPEEEEGGGG1111AAAAuuuuddddiiiiooooDDDDeeeeccccooooddddeeeerrrrSSSSeeeettttPPPPaaaarrrraaaammmmssss((((3333ddddmmmm)))), and is modified on each
call. To get decoder in the proper state for the first call,
see DESCRIPTION below.
_c_m_p_D_a_t_a points to the next block of compressed bytes to be decoded.
The calling procedure should pass an entire compressed block's
worth of bytes. Generally, this amount is unkown and the
calling procedure must queue up at least as many bytes as
returned from a call to ddddmmmmMMMMPPPPEEEEGGGG1111AAAAuuuuddddiiiiooooHHHHeeeeaaaaddddeeeerrrrGGGGeeeettttBBBBlllloooocccckkkkBBBByyyytttteeeessss((((3333ddddmmmm)))) as
that is the expected length that ddddmmmmMMMMPPPPEEEEGGGG1111AAAAuuuuddddiiiiooooDDDDeeeeccccooooddddeeee((((3333ddddmmmm)))) will
require.
_o_u_t_p_u_t points to a pre-allocated block of memory into which
ddddmmmmMMMMPPPPEEEEGGGG1111AAAAuuuuddddiiiiooooDDDDeeeeccccooooddddeeee((((3333ddddmmmm)))) will write the decompressed sample
frames. output must be big enough to hold the entire
decompressed frame. Note that all decompressed blocks contain
the same number of sample frames. A way to determine this size
is described below under DESCRIPTION.
_f_m_t_B_y_t_e_s pointer to an integer return value; indicates the actual number
of compressed bytes consumed. By advancing the index in the
compressed data stream by this amount, the next block of
compressed data will be located correctly. If the decoder
structure or the compressed data is malformed, this return will
The decoder state parameters need to be initialized before the first call
to ddddmmmmMMMMPPPPEEEEGGGG1111AAAAuuuuddddiiiiooooDDDDeeeeccccooooddddeeee((((3333ddddmmmm)))), after which it is self-maintaining. DMparam
*params should be passed to ddddmmmmMMMMPPPPEEEEGGGG1111AAAAuuuuddddiiiiooooHHHHeeeeaaaaddddeeeerrrrGGGGeeeettttPPPPaaaarrrraaaammmmssss in order to fill
in the params structure from the compressed data header, and find the
worst-case buffering requirements for the compressed data. Then, a call
to ddddmmmmMMMMPPPPEEEEGGGG1111AAAAuuuuddddiiiiooooDDDDeeeeccccooooddddeeeerrrrSSSSeeeettttPPPPaaaarrrraaaammmmssss((((3333ddddmmmm)))) will set decoding parameter values
for decoder. And ddddmmmmMMMMPPPPEEEEGGGG1111AAAAuuuuddddiiiiooooDDDDeeeeccccooooddddeeeerrrrGGGGeeeettttPPPPaaaarrrraaaammmmssss((((3333ddddmmmm)))) will be used to qurey
DDDDMMMM____AAAAUUUUDDDDIIIIOOOO____CCCCOOOODDDDEEEECCCC____FFFFRRRRAAAAMMMMEEEESSSS____PPPPEEEERRRR____BBBBLLLLOOOOCCCCKKKK, which contains the size of decompressed
blocks for the compressed stream.
NNNNOOOOTTTTEEEE
compression/decompression delay will be caused by filter operations that
convolve a N past input samples with a filter M-coefficient array to
create N+M-1 output samples. The filtered signal contains more samples
than the unfiltered signal. the output signal is offset by
DDDDMMMM____AAAAUUUUDDDDIIIIOOOO____CCCCOOOODDDDEEEECCCC____FFFFIIIILLLLTTTTEEEERRRR____DDDDEEEELLLLAAAAYYYY samples from the first sample thus omits the
last DDDDMMMM____AAAAUUUUDDDDIIIIOOOO____CCCCOOOODDDDEEEECCCC____FFFFIIIILLLLTTTTEEEERRRR____DDDDEEEELLLLAAAAYYYY samples from the output file.